package com.cluster.user.util;

import java.io.*;
import java.nio.file.*;
import java.util.*;
import java.util.stream.*;

public class LocalDataAggregation {
    public static void main(String[] args) {
        // Step 1: 设定文件路径
        String directoryPath = "D:\\data\\userg_group\\download\\810"; // 目标文件夹路径
        String outputFile = "D:\\data\\userg_group\\download\\810_merged_output.csv"; // 合并后的输出文件
        List<String[]> splitData = new ArrayList<>();

        try {
            // Step 2: 获取所有日期子目录并遍历
            Files.list(Paths.get(directoryPath))
                    .filter(Files::isDirectory) // 只选择目录
                    .forEach(dateDir -> {
                        System.out.println("Processing directory: " + dateDir.getFileName());
                        try {
                            // 遍历每个日期目录中的文件
                            Files.walk(dateDir) // 遍历目录及其子目录
                                    .filter(Files::isRegularFile) // 只处理文件
                                    .flatMap(file -> {
                                        try {
                                            // Step 3: 读取文件并过滤特定行
                                            return Files.lines(file)
                                                    .filter(line -> !line.contains("MARKLINE|0000|0000")) // 过滤行
                                                    .map(line -> {
                                                        String[] fields = line.split("\\|"); // 按照分隔符切割字段
                                                        // 获取文件上级目录的日期（假设日期是上级目录名称）
                                                        String date = file.getParent().getFileName().toString(); // 获取上级目录名（日期）

                                                        // 筛选出需要的字段（假设我们需要字段 1, 3, 5）
                                                        List<String> selectedFields = new ArrayList<>();
                                                        selectedFields.add(fields[0]);  // Field1

//                                                        selectedFields.add(fields[2]);  // Field3
//                                                        selectedFields.add("0");  // Field5（假设我们始终将其置为 "0"）

                                                        selectedFields.add(fields[1]);
                                                        selectedFields.add(fields[2]);  // Field3

//                                                        if ( fields.length == 1){
//                                                            selectedFields.add(fields[0]);
//                                                            selectedFields.add("0000");
//                                                        }
//                                                        if (fields.length ==2){
//                                                            selectedFields.add(fields[0]);
//                                                            selectedFields.add(fields[1]);
//                                                        }
//                                                        selectedFields.add("0");

                                                        selectedFields.add(date);  // 上级目录的日期
                                                        selectedFields.add("850_new"); // 固定值 "620"

                                                        return selectedFields.toArray(new String[0]); // 返回字段数组
                                                    });
                                        } catch (IOException e) {
                                            e.printStackTrace();
                                            return Stream.empty(); // 出现错误时跳过
                                        }
                                    })
                                    .forEach(splitData::add); // 将处理后的数据添加到列表
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    });

            // Step 4: 输出合并并处理后的结果到 CSV 文件
            try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(outputFile))) {
                // 直接写入每一行数据，不生成标题
                for (String[] fields : splitData) {
                    writer.write(String.join(",", fields)); // 使用逗号连接字段
                    writer.newLine();
                }
                System.out.println("合并并过滤的数据已保存到文件: " + outputFile);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
